#include <EB0/EB0.h>

namespace EB0
{
namespace Window
{
#pragma region Constructor / Destructor
	// Constructor
	WindowListener::WindowListener()
	{
		// Pass
	}

	// Destructor
	WindowListener::~WindowListener()
	{
		// Pass
	}
#pragma endregion

#pragma region Close / Resize / Gain Focus / Lose Focus
	// On Close
	void WindowListener::onClose(RenderWindow* window)
	{
		//window->close();
	}

	// On Resize
	void WindowListener::onResize(RenderWindow* window, const unsigned int width, const unsigned int height)
	{
		// Resize viewports...
		//printf("Window On Resize: %i x %i\r\n", width, height);
	}

	// On Gain Focus
	void WindowListener::onGainFocus(RenderWindow* window)
	{
		//printf("Window On Gain Focus\r\n");
	}

	// On Lose Focus
	void WindowListener::onLoseFocus(RenderWindow* window)
	{
		//printf("Window On Lose Focus\r\n");
	}
#pragma endregion

#pragma region Keyboard
	// On Text Enter
	void WindowListener::onCharEnter(RenderWindow* window, const unsigned int& chr)
	{
		//printf("Window On Text Enter: %c\r\n", chr);
	}

	// On Key Press
	void WindowListener::onKeyPress(RenderWindow* window, const sf::Event::KeyEvent& key)
	{
		//printf("Window On Key Press: %c\r\n", key.Code);

		// Shutdown the program when the Escape key is pressed
		/*if (key.Code == sf::Key::Escape)
			quit();*/
	}

	// On Key Release
	void WindowListener::onKeyRelease(RenderWindow* window, const sf::Event::KeyEvent& key)
	{
		//printf("Window On Key Release: %c\r\n", key.Code);
	}
#pragma endregion

#pragma region Mouse
	// On Mouse Enter
	void WindowListener::onMouseEnter(RenderWindow* window)
	{
		//printf("Window On Mouse Enter\r\n");
	}

	// On Mouse Leave
	void WindowListener::onMouseLeave(RenderWindow* window)
	{
		//printf("Window On Mouse Leave\r\n");
	}

	// On Mouse Button Press
	void WindowListener::onMouseButtonPress(RenderWindow* window, const sf::Event::MouseButtonEvent& mouseButton)
	{
		//printf("Window On Mouse Button Press: %i %i btn %i\r\n", mouseButton.X, mouseButton.Y, mouseButton.Button);
	}

	// On Mouse Button Release
	void WindowListener::onMouseButtonRelease(RenderWindow* window, const sf::Event::MouseButtonEvent& mouseButton)
	{
		//printf("Window On Mouse Button Release: %i %i btn %i\r\n", mouseButton.X, mouseButton.Y, mouseButton.Button);
	}

	// On Mouse Move
	void WindowListener::onMouseMove(RenderWindow* window, const sf::Event::MouseMoveEvent& mouseMove)
	{
		//printf("Window On Mouse Move: %i %i\r\n", mouseMove);
	}

	// On Mouse Wheel Move
	void WindowListener::onMouseWheelMove(RenderWindow* window, const int& mouseWheelMove)
	{
		//printf("Window On Mouse Wheel Move: %i\r\n", mouseWheelMove);
	}
#pragma endregion
} // namespace Window
}